package com.leesche.zcsp.node.web.dao;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.leesche.zcsp.node.utils.web.PagingCondition;

/**
 * @Title: BaseDao.java
 * @Package com.leesche.zcsp.center.web.dao
 * @Description:()
 * @author dennies yang
 * @date 2016年9月21日 下午8:41:51
 * @version V1.0
 */
public interface BaseDao<T, S, D extends Serializable, P extends PagingCondition, ID extends Serializable> {
	long countByExample(S s);

	int deleteByExample(S s);

	int deleteByPrimaryKey(ID id);

	/**
	 * 娣诲姞绯荤粺鏉冮檺淇℃伅
	 * 
	 * @param record
	 *            绯荤粺鏉冮檺瀹炰綋瀵硅薄
	 * @return 鏁版嵁搴搃nsert缁撴灉
	 */
    int insert(T t);

	int insertSelective(T t);

	/**
	 * 鏍规嵁鏌ヨ鏉′欢妯＄増鏌ヨ绯荤粺鏉冮檺
	 * 
	 * @param example
	 *            鏌ヨ鏉′欢妯＄増
	 * @return 绯荤粺鏉冮檺闆嗗悎
	 */
	// List<SysModule> selectByExample(S s);

	/**
	 * 鏍规嵁鏌ヨ鏉′欢妯＄増鏌ヨ绯荤粺鏉冮檺锛堝彲鑱斿悎鏌ヨ锛�
	 * 
	 * @param example
	 *            鏌ヨ鏉′欢妯＄増
	 * @return 绯荤粺鏉冮檺锛堥敭鍊煎锛夐泦鍚�
	 */
    List<Map<String, Object>> selectByExample(S s);

	/**
	 * 鏍规嵁鏉冮檺ID鑾峰彇绯荤粺鏉冮檺淇℃伅
	 * 
	 * @param moduleid
	 *            鏉冮檺ID
	 * @return 绯荤粺鏉冮檺淇℃伅
	 */
	T selectByPrimaryKey(ID id);

	int updateByExampleSelective(@Param("record") T t,
                                 @Param("example") S s);

	int updateByExample(@Param("record") T t,
                        @Param("example") S s);

	int updateByPrimaryKeySelective(T t);

	int updateByPrimaryKey(T t);

	List<D> selectPageByCriteria(P p);

	Integer countPageByCriteria(P p);
	/***
	 * 
	* @Title: selectByCondition 
	* @Description: TODO(通过条件查询单挑数据) 
	* @param @param p
	* @param @return   
	* @return D   
	* @throws
	 */
    D  selectByCondition(P p);
	/**
	 * 
	* @Title: selectListsByCondition 
	* @Description: TODO(通过条件查询多条数据) 
	* @param @param p
	* @param @return   
	* @return List<D>   
	* @throws
	 */
    List<D> selectListsByCondition(P p);

}
